﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

namespace Ubatic.Business.Helpers
{
    public static class DbHelper
    {
        public static DbConnection CreateDbConnection()
        {
            string connectionString = ConfigurationManager.ConnectionStrings["Ubatic"].ConnectionString;
            return new SqlConnection(connectionString);
        }

        #region [Parameters]

        /// <summary>
        /// Agrega un parametro en un comando
        /// </summary>
        /// <param name="command">Comando en el que se agregara el parametro.</param>
        /// <param name="parameterName">Nombre del parametro</param>
        /// <param name="type">Tipo de datos del parametro en DB.</param>
        public static void AddCommandParameter(DbCommand command, string parameterName, DbType type)
        {
            DbParameter param = command.CreateParameter();
            param.ParameterName = parameterName;
            param.DbType = type;
            command.Parameters.Add(param);
        }

        /// <summary>
        /// Agrega un parametro en un comando
        /// </summary>
        /// <param name="command">Comando en el que se agregara el parametro.</param>
        /// <param name="parameterName">Nombre del parametro</param>
        /// <param name="type">Tipo de datos del parametro en DB.</param>
        /// <param name="value">Valor.</param>
        public static void AddCommandParameter(DbCommand command, string parameterName, DbType type, object value)
        {
            DbParameter param = command.CreateParameter();
            param.ParameterName = parameterName;
            param.DbType = type;
            param.Value = value;
            command.Parameters.Add(param);
        }

        /// <summary>
        /// Agrega un parametro en un comando
        /// </summary>
        /// <param name="command">Comando en el que se agregara el parametro.</param>
        /// <param name="parameterName">Nombre del parametro</param>
        /// <param name="type">Tipo de datos del parametro en DB.</param>
        /// <param name="direction">Indica si es de entrada, salida o ambos.</param>
        public static void AddCommandParameter(DbCommand command, string parameterName, DbType type, ParameterDirection direction)
        {
            DbParameter param = command.CreateParameter();
            param.ParameterName = parameterName;
            param.Direction = direction;
            param.DbType = type;
            command.Parameters.Add(param);
        }

        /// <summary>
        /// Agrega un parametro en un comando
        /// </summary>
        /// <param name="command">Comando en el que se agregara el parametro.</param>
        /// <param name="parameterName">Nombre del parametro</param>
        /// <param name="value">Valor.</param>
        public static void AddCommandParameter(DbCommand command, string parameterName, object value)
        {
            DbParameter param = command.CreateParameter();
            param.ParameterName = parameterName;
            param.Value = value;
            command.Parameters.Add(param);
        }

        /// <summary>
        /// Agrega un parametro en un comando
        /// </summary>
        /// <param name="command">Comando en el que se agregara el parametro.</param>
        /// <param name="parameterName">Nombre del parametro</param>
        /// <param name="direction">Indica si es de entrada, salida o ambos.</param>
        public static void AddCommandParameter(DbCommand command, string parameterName, ParameterDirection direction)
        {
            DbParameter param = command.CreateParameter();
            param.ParameterName = parameterName;
            param.Direction = direction;
            command.Parameters.Add(param);
        }

        /// <summary>
        /// Agrega un parametro en un comando
        /// </summary>
        /// <param name="command">Comando en el que se agregara el parametro.</param>
        /// <param name="parameterName">Nombre del parametro</param>
        /// <param name="direction">Indica si es de entrada, salida o ambos.</param>
        public static void AddCommandDecimalParameter(DbCommand command, string parameterName, ParameterDirection direction, byte precision, byte scale)
        {
            DbParameter param = command.CreateParameter();
            param.ParameterName = parameterName;
            param.Direction = direction;
            param.DbType = DbType.Decimal;
            command.Parameters.Add(param);
            ((SqlParameter)command.Parameters[parameterName]).Precision = precision;
            ((SqlParameter)command.Parameters[parameterName]).Scale = scale;

        }

        #endregion
    }
}
